home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Diamond Collection / The Diamond Collection (Software Vault)(Digital Impact).ISO / cdr44 / frasrc19.zip / ANT.C < prev    next >
C/C++ Source or Header  |  1994-12-10  |  4KB  |  160 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "prototyp.h"
  5. #include "helpdefs.h"
  6.  
  7. void setwait(long *wait)
  8. {
  9.     char msg[80];
  10.     int kbdchar;
  11.     for(;;)
  12.     {
  13.        sprintf(msg,"Delay %4ld",*wait);
  14.        while(strlen(msg) < 15)
  15.           strcat(msg," ");
  16.        msg[15] = 0;   
  17.        showtempmsg((char far *)msg);
  18.        kbdchar = getakey();
  19.        switch(kbdchar)
  20.        {
  21.          case    RIGHT_ARROW_2:
  22.          case    UP_ARROW_2:
  23.             (*wait) += 100;
  24.             break;
  25.          case    RIGHT_ARROW:
  26.          case    UP_ARROW:
  27.             (*wait) += 10;
  28.             break;
  29.          case    DOWN_ARROW_2:
  30.          case    LEFT_ARROW_2:
  31.             (*wait) -= 100;
  32.             break;
  33.          case    LEFT_ARROW:
  34.          case    DOWN_ARROW:
  35.             (*wait) -= 10;
  36.             break;
  37.          default:
  38.             cleartempmsg();
  39.             return;   
  40.        }
  41.        if(*wait < 0)
  42.           *wait = 0;
  43.     }
  44. }
  45.  
  46.  
  47. int ant(void)
  48. {
  49.    int oldhelpmode;
  50.    long maxpts;
  51.    long count;
  52.    int kbdchar;
  53.    long step;
  54.    long wait;
  55.    char rule[256];
  56.    int numcolors;
  57.    static int x,y;
  58.    int color;
  59.    int direction=0;  /* 0=left 1=up 2=right 3=down */
  60.    oldhelpmode = helpmode;
  61.    helpmode = ANTCOMMANDS;
  62.    sprintf(rule,"%.17g",param[0]);
  63.    wait = step = abs(orbit_delay);
  64.    maxpts = (long)param[1];
  65.    maxpts = labs(maxpts);
  66.    if(step == 1)
  67.       wait = 0;
  68.    else
  69.       step = 0;   
  70.  
  71.    count = 0;   
  72.    numcolors = strlen(rule);
  73.    if(numcolors == 0)
  74.    {
  75.       stopmsg(0,"Empty rule string");
  76.       goto exit_ant;
  77.    }   
  78.    for(color=0;color<numcolors;color++)
  79.    {
  80.        if(rule[color] != '1')
  81.           rule[color] = '0';
  82.        rule[color] = (char)(rule[color] - (int)'0'); 
  83.    }
  84.    x = xdots/2;
  85.    y = ydots/2;
  86.  
  87.    for(;;)
  88.    {
  89.       color = getcolor(x,y);
  90.       putcolor(x,y,15);
  91.       kbdchar=keypressed();
  92.       if(kbdchar || step)
  93.       {
  94.          int done = 0;
  95.          if(kbdchar == 0)
  96.             kbdchar = getakey();
  97.          switch(kbdchar)
  98.          {   
  99.             case SPACE:
  100.                step = 1 - step;
  101.                break;
  102.             case ESC:
  103.                done = 1;
  104.                break;   
  105.             case RIGHT_ARROW:
  106.             case UP_ARROW:
  107.             case DOWN_ARROW:
  108.             case LEFT_ARROW:
  109.             case RIGHT_ARROW_2:
  110.             case UP_ARROW_2:
  111.             case DOWN_ARROW_2:
  112.             case LEFT_ARROW_2:
  113.                setwait(&wait);
  114.                break;
  115.             default:
  116.                done = 1;
  117.                break;   
  118.          }               
  119.          if(done)
  120.             goto exit_ant;
  121.          if(keypressed())
  122.             getakey();   
  123.       }
  124.       if(wait > 0 && step == 0)
  125.          sleepms(wait);
  126.       if(rule[color%numcolors])
  127.          direction++;
  128.       else 
  129.          direction--;
  130.       if(direction < 0)
  131.          direction = 3;            
  132.       else if(direction > 3)
  133.          direction = 0;
  134.       putcolor(x,y,++color);
  135.       switch(direction)
  136.       {
  137.          case 0:
  138.             x--;
  139.             break;
  140.          case 1:
  141.             y--;
  142.             break;
  143.          case 2:
  144.             x++;
  145.             break;
  146.          case 3:
  147.             y++;
  148.             break;
  149.       }      
  150.       if(x < 0 || x >= xdots || y < 0 || y >= ydots)
  151.          break;
  152.       if(++count > maxpts)
  153.          break;
  154.    }
  155.    exit_ant:
  156.    helpmode = oldhelpmode;
  157.    return(0);
  158. }
  159.  
  160.